#include <stdio.h>
#include <stdbool.h>
#include <inttypes.h>
#include <iso646.h>
#include <stdlib.h>
#include <time.h>
#include <limits.h>
#include <float.h>
#include <string.h>
#include <math.h>
#include <errno.h>
#include <unistd.h>

// LIB FROM ${COMMUNIS_PATH}/Deploy_store/.qa/main_repo_fn/dir_c_/_c_/_lib
#include "lib/lc_0.h"
#include "lib/lc_1.h"
#include "lib/io_1.h"
#include "lib/lib_1.h"

#define N 6

int main(int argc, char const *argv[])
{
    // Переменная, в которую будет сохранен указатель
    // на управляющую таблицу открываемого потока данных
    FILE *mf;
    // Массив для буферизации данных
    char str[1024] = "";

    printf("Открытие файла: ");
    // Открытие файла
    mf = fopen("test.txt", "w");
    // Проверка открытия файла
    if (mf == NULL)
        printf("ошибка\n");
    else
        printf("выполнено\n");

    // Установка буферизации
    setvbuf(mf, str, _IOFBF, 1024);

    // Запись в файл 10 символов поочередно, по одному символу.
    // Данные в файл записаны не будут, а накопятся в буфере str
    for (int i = 0; i < 10; i++)
        putc('1', mf);

    // Вывод содержимого буфера str на консоль
    printf("str: %s\n", str);

    // Закрытие файла. После закрытия файла содержимое буфера
    // str будет записано в файл.
    printf("Закрытие файла: ");
    if (fclose(mf) == EOF)
        printf("ошибка\n");
    else
        printf("выполнено\n");

    return 0;
}

// В примере открывается файл для записи и устанавливается буферизация 
// (размер буфера 1024 байта, режим буферизации - полный). В файл пишется десять 
// символов, по одному символу. Символы в начале накапливаются в буфере (буферизуются), 
// что позволяет сэкономить время на записи в файл. Так как размер буфера значительно 
// больше объема записываемых данных, то из буфера в файл данные будут записаны только после 
// закрытия файла, штатного завершения работы программы или после вызова функции fflush. 
// В примере данные будут записаны в файл после его закрытия (fclose).